package com.demo.security.access;

import java.util.Collection;

import org.springframework.security.core.Authentication;

/**
 * 访问逻辑调用
 * 进行访问逻辑处理
 * 
 * @author ryuu.kk
 */
public interface AccessLogicInvocation<T> {

	/**
	 * 访问逻辑调用是否支持该类
	 * @param clazz 对象类
	 * @return 是否支持
	 */
    boolean supports(Class<?> clazz);
    /**
     * 访问逻辑调用是否支持Logic属性
     * @param attribute 逻辑属性
     * @return 是否支持
     */
    boolean supports(LogicAttribute attribute);
    /**
     * 访问调用
     * 将处理目标类的访问逻辑
     * 该类目前使用安全框架的Authentication,以后将移除,使用viiso的安全封装类。
     * @param authentication 权限
     * @param object 访问对象
     * @param attributes 逻辑配置属性
     */
    void invoke(Authentication authentication, T object, Collection<LogicAttribute> attributes);
}
